package model

import "time"

// 命令事件常量
const (
	/* 客户端发起的动作 */
	TYPING = iota + 1 //输入中 -> THE_OTHER_TYPING

	READ //消息已读 -> THE_OTHER_READ

	RECALL //消息撤回 ->  <判断是否允许撤回> -> THE_RECALLED ;

)
const (
	/*服务端发起的动作*/
	ACK = iota + 10 //服务端已收到消息

	THE_OTHER_TYPING //对方正在输入中

	THE_OTHER_READ //消息被对方已读

	THE_RECALLED  //消息已撤回
	RECALL_ALLOW  //允许消息撤回
	RECALL_FORBID //禁止消息撤回
)

const (
	Status_CREATE = 0 //已创建
	Status_SENT   = 1 //已发送
	Status_READ   = 2 //已读
	Status_RECALL = 3 //已撤回
	Status_HIDDEN = 4 //已屏蔽隐藏
)

/*
消息对象
*/
type ChatMessage struct {
	IsGroup  bool   `json:"isGroup"`  //（客户端携带）true是group消息
	Receiver string `json:"receiver"` //（客户端携带）消息的接收者
	Content  string `json:"content"`  //（客户端携带）消息文本内容
	Type     int8   `json:"type"`     //（客户端携带）消息类型：0文本、1图片、2视频、3语音、4文件
	UrlRef   bool   `json:"urlRef"`   //（客户端携带）消息内容是不是url链接
	LocalId  int64  `json:"localId"`  //（客户端携带）本地ID，用于客户端定位Message

	Sender     string    `json:"sender"`     //（服务端赋值）消息的发送者
	ChatId     string    `json:"chatId"`     //（服务端赋值）聊天关系ID：如果是单聊是好友关系ID，群聊则是groupId，陌生人聊天则是随机生成的uuid
	ConvId     int64     `json:"convId"`     //（服务端赋值）会话ID
	Id         int64     `json:"id"`         //（服务端赋值）唯一ID
	IsNrt      bool      `json:"isNrt"`      //（服务端赋值）true非实时消息
	CreateTime time.Time `json:"createTime"` //（服务端赋值）消息创建时间
}

type MsgEvent struct {
	Event   int    `json:"event"`   //（客户端携带）事件。
	Action  int    `json:"action"`  //（服务端赋值或客户端携带）动作。事件产生动作
	IsGroup bool   `json:"isGroup"` //（客户端携带）true是group消息
	ChatId  string `json:"chatId"`  //（客户端携带）聊天关系ID（推荐由服务端赋值）
	LocalId int64  `json:"localId"` //（客户端携带）本地ID，用于客户端定位Message
	MsgId   int64  `json:"msgId"`   //（客户端携带）唯一ID

	SendTo string `json:"sendTo"` //（服务端赋值或客户端携带）事件消息投递给谁。如果不是群聊，则客户端携带，是群聊则不用携带
}

type MsgStatusChange struct {
	MsgId     int64             `json:"msgId"`
	MsgStatus int8              `json:"msgStatus"`
	Extra     map[string]string `json:"extra"`
}

type MessageWrap struct {
	Event   *MsgEvent    `json:"event"`
	Message *ChatMessage `json:"message"`
	UserId  string       `json:"userId"`
	Extend  string       `json:"Extend"` //扩展字段
}
